From 4a22a3ffb95d364a9f699ca7dcf4c18445acd69c Mon Sep 17 00:00:00 2001 From: "mjw@wray-m-3.hpl.hp.com" Date: Thu, 21 Oct 2004 16:11:03 +0000 Subject: [PATCH] bitkeeper revision 1.1159.116.4 (4177df97ZOvl759Lo38Gv7CY081ZCA) Add resource control parameter to migrate. --- tools/libxc/xc_io.h | 1 + tools/python/xen/xend/XendClient.py | 5 +++-- tools/python/xen/xend/XendDomain.py | 4 ++-- tools/python/xen/xend/XendMigrate.py | 13 ++++++++----- tools/python/xen/xend/server/SrvDomain.py | 3 ++- tools/python/xen/xm/migrate.py | 6 +++++- tools/xfrd/xen_domain.c | 3 ++- tools/xfrd/xen_domain.h | 2 +- tools/xfrd/xfrd.c | 9 ++++++--- 9 files changed, 30 insertions(+), 16 deletions(-) diff --git a/tools/libxc/xc_io.h b/tools/libxc/xc_io.h index 4feca0b358..341f29be60 100644 --- a/tools/libxc/xc_io.h +++ b/tools/libxc/xc_io.h @@ -8,6 +8,7 @@ typedef struct XcIOContext { u32 domain; unsigned flags; + int resource; IOStream *io; IOStream *info; IOStream *err; diff --git a/tools/python/xen/xend/XendClient.py b/tools/python/xen/xend/XendClient.py index 4ebb6acbea..4a9d265a0f 100644 --- a/tools/python/xen/xend/XendClient.py +++ b/tools/python/xen/xend/XendClient.py @@ -244,11 +244,12 @@ class Xend: {'op' : 'save', 'file' : filename }) - def xend_domain_migrate(self, id, dst, live=0): + def xend_domain_migrate(self, id, dst, live=0, resource=0): return self.xendPost(self.domainurl(id), {'op' : 'migrate', 'destination': dst, - 'live' : live }) + 'live' : live, + 'resource' : resource }) def xend_domain_pincpu(self, id, cpu): return self.xendPost(self.domainurl(id), diff --git a/tools/python/xen/xend/XendDomain.py b/tools/python/xen/xend/XendDomain.py index 5532d5b98f..a757414483 100644 --- a/tools/python/xen/xend/XendDomain.py +++ b/tools/python/xen/xend/XendDomain.py @@ -594,7 +594,7 @@ class XendDomain: self.refresh_schedule() return val - def domain_migrate(self, id, dst, live): + def domain_migrate(self, id, dst, live=0, resource=0): """Start domain migration. @param id: domain id @@ -604,7 +604,7 @@ class XendDomain: # Don't forget to cancel restart for it. dominfo = self.domain_lookup(id) xmigrate = XendMigrate.instance() - val = xmigrate.migrate_begin(dominfo, dst, live=live) + val = xmigrate.migrate_begin(dominfo, dst, live=live, resource=resource) return val def domain_save(self, id, dst, progress=0): diff --git a/tools/python/xen/xend/XendMigrate.py b/tools/python/xen/xend/XendMigrate.py index f1bcf67c67..a1c261deb5 100644 --- a/tools/python/xen/xend/XendMigrate.py +++ b/tools/python/xen/xend/XendMigrate.py @@ -260,7 +260,7 @@ class XendMigrateInfo(XfrdInfo): """Representation of a migrate in-progress and its interaction with xfrd. """ - def __init__(self, xid, dominfo, host, port, live): + def __init__(self, xid, dominfo, host, port, live=0, resource=0): XfrdInfo.__init__(self) self.xid = xid self.dominfo = dominfo @@ -271,13 +271,15 @@ class XendMigrateInfo(XfrdInfo): self.dst_port = port self.dst_dom = None self.live = live + self.resource = resource self.start = 0 def sxpr(self): sxpr = ['migrate', ['id', self.xid ], ['state', self.state ], - ['live', self.live ] ] + ['live', self.live ], + ['resource', self.resource] ] sxpr_src = ['src', ['host', self.src_host], ['domain', self.src_dom] ] sxpr.append(sxpr_src) sxpr_dst = ['dst', ['host', self.dst_host] ] @@ -300,7 +302,8 @@ class XendMigrateInfo(XfrdInfo): vmconfig, self.dst_host, self.dst_port, - self.live ]) + self.live, + self.resource ]) ## def xfr_vm_suspend(self, xfrd, val): ## def cbok(val): @@ -490,7 +493,7 @@ class XendMigrate: reactor.connectTCP('localhost', XFRD_PORT, xcf) return info.deferred - def migrate_begin(self, dominfo, host, port=XFRD_PORT, live=0): + def migrate_begin(self, dominfo, host, port=XFRD_PORT, live=0, resource=0): """Begin to migrate a domain to another host. @param dominfo: domain info @@ -499,7 +502,7 @@ class XendMigrate: @return: deferred """ xid = self.nextid() - info = XendMigrateInfo(xid, dominfo, host, port, live) + info = XendMigrateInfo(xid, dominfo, host, port, live, resource) return self.session_begin(info) def save_begin(self, dominfo, file): diff --git a/tools/python/xen/xend/server/SrvDomain.py b/tools/python/xen/xend/server/SrvDomain.py index a0ec17526f..f25324470b 100644 --- a/tools/python/xen/xend/server/SrvDomain.py +++ b/tools/python/xen/xend/server/SrvDomain.py @@ -81,7 +81,8 @@ class SrvDomain(SrvDir): fn = FormFn(self.xd.domain_migrate, [['dom', 'str'], ['destination', 'str'], - ['live', 'int']]) + ['live', 'int'], + ['resource', 'int']]) deferred = fn(req.args, {'dom': self.dom.id}) print 'op_migrate>', deferred deferred.addCallback(self._op_migrate_cb, req) diff --git a/tools/python/xen/xm/migrate.py b/tools/python/xen/xm/migrate.py index 366fb5f694..070905bc11 100644 --- a/tools/python/xen/xm/migrate.py +++ b/tools/python/xen/xm/migrate.py @@ -26,6 +26,10 @@ gopts.opt('live', short='l', fn=set_true, default=0, use="Use live migration.") +gopts.opt('resource', short='r', + fn=set_int, default=0, + use="Set level of resource usage for migration.") + def help(argv): gopts.argv = argv gopts.usage() @@ -42,5 +46,5 @@ def main(argv): dst = args[1] if dom in [DOM0_NAME, DOM0_ID]: opts.err('Cannot migrate ' + dom) - server.xend_domain_migrate(dom, dst, opts.vals.live) + server.xend_domain_migrate(dom, dst, opts.vals.live, opts.vals.resource) diff --git a/tools/xfrd/xen_domain.c b/tools/xfrd/xen_domain.c index 453614d8fe..abc7b7dc3c 100644 --- a/tools/xfrd/xen_domain.c +++ b/tools/xfrd/xen_domain.c @@ -60,7 +60,7 @@ void xcfini(void){ int xen_domain_snd(Conn *xend, IOStream *io, uint32_t dom, char *vmconfig, int vmconfig_n, - int live){ + int live, int resource){ int err = 0; #ifdef _XEN_XFR_STUB_ char buf[1024]; @@ -99,6 +99,7 @@ int xen_domain_snd(Conn *xend, IOStream *io, if(live){ ioctxt->flags |= XCFLAGS_LIVE; } + ioctxt->resource = resource; err = xc_linux_save(xcinit(), ioctxt); #endif dprintf("< err=%d\n", err); diff --git a/tools/xfrd/xen_domain.h b/tools/xfrd/xen_domain.h index 2ea66b743e..c84e8b8d63 100644 --- a/tools/xfrd/xen_domain.h +++ b/tools/xfrd/xen_domain.h @@ -10,7 +10,7 @@ extern int xen_domain_snd(Conn *xend, IOStream *io, uint32_t dom, char *vmconfig, int vmconfig_n, - int live); + int live, int resource); extern int xen_domain_rcv(IOStream *io, uint32_t *dom, char **vmconfig, int *vmconfig_n, diff --git a/tools/xfrd/xfrd.c b/tools/xfrd/xfrd.c index 5da736f6a9..236b67755b 100644 --- a/tools/xfrd/xfrd.c +++ b/tools/xfrd/xfrd.c @@ -96,7 +96,7 @@ receiver: Sxpr oxfr_configure; // (xfr.configure ) Sxpr oxfr_err; // (xfr.err ) Sxpr oxfr_hello; // (xfr.hello ) -Sxpr oxfr_migrate; // (xfr.migrate ) +Sxpr oxfr_migrate; // (xfr.migrate ) Sxpr oxfr_migrate_ok;// (xfr.migrate.ok ) Sxpr oxfr_progress; // (xfr.progress ) Sxpr oxfr_restore; // (xfr.restore ) @@ -241,6 +241,7 @@ typedef struct XfrState { char *xfr_host; uint32_t vmid_new; int live; + int resource; } XfrState; /** Get the name of a transfer state. @@ -623,7 +624,7 @@ int xfr_send_state(XfrState *state, Conn *xend, Conn *peer){ err = xen_domain_snd(xend, peer->out, state->vmid, state->vmconfig, state->vmconfig_n, - state->live); + state->live, state->resource); dprintf(">*** Sent domain %u\n", state->vmid); if(err) goto exit; // Sending the domain suspends it, and there's no way back. @@ -771,7 +772,7 @@ int xfr_save(Args *args, XfrState *state, Conn *xend, char *file){ err = xen_domain_snd(xend, io, state->vmid, state->vmconfig, state->vmconfig_n, - 0); + 0, 0); if(err){ err = xfr_error(xend, err); } else { @@ -926,6 +927,8 @@ int xfrd_service(Args *args, int peersock, struct sockaddr_in peer_in){ if(err) goto exit; err = intof(sxpr_childN(sxpr, n++, ONONE), &state->live); if(err) goto exit; + err = intof(sxpr_childN(sxpr, n++, ONONE), &state->resource); + if(err) goto exit; err = xfr_send(args, state, conn, addr, port); } else if(sxpr_elementp(sxpr, oxfr_save)){ -- 2.30.2